// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

/**
 * A utility class used to write logging information during a test.
 */
class Logger {
  /**
   * The width of the field in which labels are printed.
   */
  static const int _labelWidth = 8;

  /**
   * The separator used to separate the label from the content.
   */
  static const String _separator = ' : ';

  /**
   * The sink to which the logged information should be written.
   */
  final StringSink sink;

  /**
   * Initialize a newly created logger to write to the given [sink].
   */
  Logger(this.sink);

  /**
   * Log the given information.
   *
   * The [label] is used to indicate the kind of information being logged, while
   * the [content] contains the actual information. If a list of [arguments] is
   * provided, then they will be written after the content.
   */
  void log(String label, String content, {List<String> arguments = null}) {
    for (int i = _labelWidth - label.length; i > 0; i--) {
      sink.write(' ');
    }
    sink.write(label);
    sink.write(_separator);
    sink.write(content);
    arguments?.forEach((String argument) {
      sink.write(' ');
      sink.write(argument);
    });
    sink.writeln();
  }
}
